From 786521d5a818019e5841d209a76ea27ba777125c Mon Sep 17 00:00:00 2001 From: Michael Hutchinson Date: Mon, 25 Jul 2011 10:29:23 +0200 Subject: [PATCH] Bug 655074 - Fix crash with undecorated windows on MacOS Lion --- gdk/quartz/gdkwindow-quartz.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c index a6fc4ed22e..5dac054e37 100644 --- a/gdk/quartz/gdkwindow-quartz.c +++ b/gdk/quartz/gdkwindow-quartz.c @@ -2559,10 +2559,6 @@ gdk_quartz_window_set_decorations (GdkWindow *window, old_mask = [impl->toplevel styleMask]; - /* Note, there doesn't seem to be a way to change this without - * recreating the toplevel. There might be bad side-effects of doing - * that, but it seems alright. - */ if (old_mask != new_mask) { NSRect rect; @@ -2586,15 +2582,28 @@ gdk_quartz_window_set_decorations (GdkWindow *window, rect = [NSWindow contentRectForFrameRect:rect styleMask:old_mask]; } - impl->toplevel = [impl->toplevel initWithContentRect:rect - styleMask:new_mask - backing:NSBackingStoreBuffered - defer:NO]; - - [impl->toplevel setHasShadow: window_type_hint_to_shadow (impl->type_hint)]; - [impl->toplevel setLevel: window_type_hint_to_level (impl->type_hint)]; + /* Note, before OS 10.6 there doesn't seem to be a way to change this without + * recreating the toplevel. There might be bad side-effects of doing + * that, but it seems alright. + */ +#if MAC_OS_X_VERSION_MIN_ALLOWED > MAC_OS_X_VERSION_10_5 + if ([impl->toplevel respondsToSelector:@selector(setStyleMask:)]) + { + [impl->toplevel setStyleMask:new_mask]; + } + else +#endif + { + [impl->toplevel release]; + impl->toplevel = [[GdkQuartzNSWindow alloc] initWithContentRect:rect + styleMask:new_mask + backing:NSBackingStoreBuffered + defer:NO]; + [impl->toplevel setHasShadow: window_type_hint_to_shadow (impl->type_hint)]; + [impl->toplevel setLevel: window_type_hint_to_level (impl->type_hint)]; + [impl->toplevel setContentView:old_view]; + } - [impl->toplevel setContentView:old_view]; [impl->toplevel setFrame:rect display:YES]; /* Invalidate the window shadow for non-opaque views that have shadow -- 2.30.2